﻿#ifndef MM_SERVICE_H
#define MM_SERVICE_H

#include <QObject>
#include <QString>
#include "RTCService/src/rtcclient.h"
#include "RTCService/src/RTCDefine.h"
#include "RecorderService/recorder-app.h"
#include "RecorderService/rtc-recorder.h"
#include "engine_types.h"

class ZDTalkRecorder;

class MMService : public QObject
{
    Q_OBJECT

public:
    // 录制配置结构体，用于传递录制相关参数
    struct RecordingConfig {
        QString logPath;              // 日志文件路径
        QString crashPath;            // 崩溃日志路径
        QString userName;             // 用户名
        QString userId;               // 用户ID
        QString serverName;           // Socket服务器名称
        QString recordingMode;        // 录制模式: "device" 或 "rtc-mic"
        
        // RTC音频参数（仅在rtc-mic模式下使用）
        int rtcAudioSampleRate = 48000;  // 采样率
        int rtcAudioChannels = 2;        // 声道数
        int rtcAudioFormat = 16;         // 位深度
        
        RecordingConfig() {}
    };

    explicit MMService(QObject *parent = nullptr);
    ~MMService();

    // 初始化服务
    bool initialize(const QString &serviceType, const RecordingConfig &config);
    
    // RTC 客户端接口
    RTCClient* getRTCClient() { return m_rtcClient; }
    
    // 录制应用接口
    ZDTalkRecorder* getRecorderApp() { return m_recorderApp; }
    RTCRecorder* getRTCRecorder() { return m_rtcRecorder; }
    
    // 服务类型
    QString getServiceType() const { return m_serviceType; }
    

    
    // 启用/禁用音频帧观察者
public slots:
    void enableAudioFrameObserver();
    void disableAudioFrameObserver();
    
    // 音频帧处理
    void onAudioFrameReceived(const QString &source, const ding::rtc::RtcEngineAudioFrame &frame);
    
public slots:
    
    // 启动服务
    void start();
    
    // 停止服务
    void stop();

    void onRTCClientDisconnected();  // 新增：处理RTC客户端断开连接

signals:
    void serviceStarted();
    void serviceStopped();
    void error(const QString &errorMessage);

private:
    // 服务组件
    RTCClient *m_rtcClient;
    QString m_serviceType;
    bool m_initialized;
    
    // 录制功能
    ZDTalkRecorder *m_recorderApp;
    RTCRecorder *m_rtcRecorder;  // RTC录制器
    RecordingConfig m_recordingConfig;
    
    // 私有方法
    void applyRecordingConfig(const RecordingConfig &config);
};

#endif // MM_SERVICE_H 